#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// @ 一维数组

// 可读性更高
void printArr(int arr[],int len){ // int * arr
    for(int i=0;i<len;i++){
        printf("%d\n",arr[i]);
    }
}

void test(){
    int arr[5] = {1,2,5,4,3};
    printf("%d\n", sizeof(arr));     //20   
    // 除了2中特殊情况外， 数组名是指向第一个元素的指针
    // 以下两种 一维数组名  不是 指向第一个元素的元素的指针
    // sizeof
    // 对数组名取地址

    int *p = &arr;
    printf("%d\n", &arr);  // 对数组名取地址， 步长 是整个数组
    printf("%d\n", &arr+1);

    //  打印
    int len = sizeof(arr)/sizeof(int);
    printArr(arr,len);

    // arr 数组名   一个指针常量  指针的指向不可以修改，指针指向的值可以修改
    arr[1] = 100;


    // 数组索引，可不可以为负数？   可以
    int * p = arr;
    p  = p+3;
    printf("%d\n", p[-1]);
    printf("%d\n", *(p-1));


}

void  test2(){
    int arr[5] = {1,2,5,4,3};

    int (*p)[5] = &arr;

}

void main(){

    test();

    // test2();

}